﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    public class TechnicRequestAttachmentsCollection : AbstractCollection
    {
        /// <summary>
        /// Список элементов отчёта
        /// </summary>
        public List<TechnicRequestAttachments> TechnicRequestAttachmentsList
        {
            get { return Entities.TechnicRequestAttachments.ToList(); }
        }

        #region Implementation of IGetItem

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (TechnicRequestAttachments);
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return Entities.TechnicRequestAttachments.Find(itemId);
        }

        #endregion

        #region Implementation of IAddDeleteUpdate

        /// <summary>
        /// Обновление элемента в коллекции
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <param name="userLogin">Логин пользователя, который делает изменения</param>
        /// <returns>Результат операции</returns>
        public bool Update(object item, string userLogin)
        {
            var newItem = (TechnicRequestAttachments) item;
            if (newItem == null)
                return false;

            var updateItem = GetItemByIdFromDatabase(newItem.IdTechnicRequestAttachment) as TechnicRequestAttachments;
            if (updateItem == null)
                return false;

            updateItem.IdTechnicRequest = newItem.IdTechnicRequest;
            updateItem.Name = newItem.Name;
            updateItem.Path = newItem.Path;

            return base.Update(updateItem, userLogin);
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            throw new NotImplementedException();
        }

        #endregion

        #region Implementation of IGetIdByName

        /// <summary>
        /// Получение идентификатора по имени
        /// </summary>
        /// <param name="name">Имя</param>
        /// <returns>Идентификатор</returns>
        public int GetIdByName(string name)
        {
            TechnicRequestAttachments item = TechnicRequestAttachmentsList.FirstOrDefault(c => c.Name == name);
            if (item == null) return 0;
            return item.IdTechnicRequestAttachment;
        }

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(TechnicRequestAttachmentsList);
        }

        #endregion

        /// <summary>
        /// Получение идентификатора по пути
        /// </summary>
        /// <returns>Идентификатор</returns>
        public int GetIdByPath(string attachmentPath)
        {
            TechnicRequestAttachments item = TechnicRequestAttachmentsList.FirstOrDefault(c => c.Path == attachmentPath);
            if (item == null) return 0;
            return item.IdTechnicRequestAttachment;
        }
    }
}